/** \file
 \brief Step interface.
 */
#ifndef FASTMD_STEP_INCLUDED
#define FASTMD_STEP_INCLUDED 1

#include "core/frame.hpp"

namespace FastMD 
{
	
	class Step : public Object
	{
	public:
		virtual ~Step() throw();
		const Real dt;
		
		virtual size_t vectors()         const throw() = 0;
		virtual void   predict( Frame &frame ) throw() = 0;
		virtual void   correct( Frame &frame, const bool isothermal) throw() = 0;
		
	protected:
		explicit Step( const Real time_step) throw();
		
	private:
		YOCTO_DISABLE_COPY_AND_ASSIGN(Step);
	};
	
}

#endif

